﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using BUSSINESS;
using System.IO;
using DTO;

namespace QuanLyGiaPha
{
    public partial class frmMain : Form
    {
        private BUS_ThanhVien busThanhVien = new BUS_ThanhVien();
        private BUS_Database busDatabase = new BUS_Database();
        public frmMain()
        {
            InitializeComponent();
        }

        private void mniExit_Click(object sender, EventArgs e)
        {
            if (MessageBox.Show("Bạn có muốn thoát chương trình không", "Xác Nhận", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
            {
                Application.Exit();
            }
        }

        private void mniXoaThanhVien_Click(object sender, EventArgs e)
        {
            try
            {
                int idTv = Convert.ToInt16(gridViewThanhVien.CurrentRow.Cells[0].Value);
                if (MessageBox.Show("Bạn có chắc xóa thành viên và những thuộc tính liên quan ?", "Thông tin", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
                {
                    if (busThanhVien.XoaQuanHeThanhTichOfThanhVien(idTv))
                    {
                        if (busThanhVien.XoaThanhVien(idTv))
                        {
                            MessageBox.Show("Xóa thành viên thành công !!!", "Thông tin", MessageBoxButtons.OK, MessageBoxIcon.Information);
                            loadData();
                        }
                        else
                        {
                            MessageBox.Show("Xóa thành viên thất bại !!!", "Thông tin", MessageBoxButtons.OK, MessageBoxIcon.Information);
                        }
                    }
                }
            }
            catch (Exception)
            {
                MessageBox.Show("Hãy chọn lại thành viên để xóa !!!", "Lỗi", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void tsNgheNghiep_Click(object sender, EventArgs e)
        {
            new frmNgheNghiep().Show();
        }

        private void tsQueQuan_Click(object sender, EventArgs e)
        {
            new frmQueQuan().Show();
        }

        private void tsNguyenNhanMat_Click(object sender, EventArgs e)
        {
            new frmNguyenNhanMat().Show();
        }

        private void tsLoaiQuanHe_Click(object sender, EventArgs e)
        {
            new frmLoaiQuanHe().Show();
        }

        private void tsLoaiThanhTich_Click(object sender, EventArgs e)
        {
            new frmLoaiThanhTich().Show();
        }

        private void tsDDMaiTang_Click(object sender, EventArgs e)
        {
            new frmDiaDiemMaiTang().Show();
        }
        private void loadData()
        {
            gridViewThanhVien.DataSource = busThanhVien.getAllThanhVien();
            
            tsDeleteThanhVien.Enabled = DTO_NguoiDung.isAdministrator;
            tsThemThanhVien.Enabled = DTO_NguoiDung.isAdministrator;
            mniXoaThanhVien.Enabled = DTO_NguoiDung.isAdministrator;
            mniThemThanhVien.Enabled = DTO_NguoiDung.isAdministrator;
        }
        private void frmMain_Load(object sender, EventArgs e)
        {
            try
            {
                loadData();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }

        private void tsThoat_Click(object sender, EventArgs e)
        {
            if (MessageBox.Show("Bạn có muốn thoát chương trình không","Xác Nhận",MessageBoxButtons.YesNo,MessageBoxIcon.Question)== DialogResult.Yes)
            {
                Application.Exit(); 
            }
        }

        private void btnTimKiem_Click(object sender, EventArgs e)
        {
            try
            {
                string name = txtHoTen.Text;
                bool? gioiTinh = null;
                if (rbtNam.Checked)
                {
                    gioiTinh = true;
                }
                else if (rbtNu.Checked)
                {
                    gioiTinh = false;
                }
                gridViewThanhVien.DataSource = busThanhVien.timKiemThanhVien(name, gioiTinh);
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }

        private void tsThemThanhVien_Click(object sender, EventArgs e)
        {
            frmThemThanhVien frmThemTV = new frmThemThanhVien();
            frmThemTV.Show();
            frmThemTV.FormClosing += new FormClosingEventHandler(frmThemTV_FormClosing);
        }

        void frmThemTV_FormClosing(object sender, FormClosingEventArgs e)
        {
            this.Focus();
            this.loadData();
        }

        private void thốngKêThànhViênToolStripMenuItem_Click(object sender, EventArgs e)
        {
            new frmThongKeThanhVien().Show();
        }

        private void tsTTThanhVien_Click(object sender, EventArgs e)
        {
            loadThongTinCapNhatThanhVien();
        }

        void frmUpdateTV_FormClosing(object sender, FormClosingEventArgs e)
        {
            this.Focus();
            this.loadData();
        }

        private void tsDeleteThanhVien_Click(object sender, EventArgs e)
        {
            try
            {
                int idTv = Convert.ToInt16(gridViewThanhVien.CurrentRow.Cells[0].Value);
                if (MessageBox.Show("Bạn có chắc xóa thành viên và những thuộc tính liên quan ?","Thông tin",MessageBoxButtons.YesNo, MessageBoxIcon.Question ) == DialogResult.Yes)
                {
                    if (busThanhVien.XoaQuanHeThanhTichOfThanhVien(idTv))
                    {
                        if (busThanhVien.XoaThanhVien(idTv))
                        {
                            MessageBox.Show("Xóa thành viên thành công !!!", "Thông tin", MessageBoxButtons.OK, MessageBoxIcon.Information);
                            loadData();
                        }
                        else
                        {
                            MessageBox.Show("Xóa thành viên thất bại !!!", "Thông tin", MessageBoxButtons.OK, MessageBoxIcon.Information);
                        }
                    }
                }
            }
            catch (Exception)
            {
                MessageBox.Show("Hãy chọn lại thành viên để xóa !!!", "Lỗi", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void mniThongTinCaNhan_Click(object sender, EventArgs e)
        {
            loadThongTinCapNhatThanhVien();
        }
       
        private void mniNgheNghiep_Click(object sender, EventArgs e)
        {
            frmNgheNghiep fr = new frmNgheNghiep();
            fr.Show();
        }

        private void mniThemThanhVien_Click(object sender, EventArgs e)
        {
            frmThemThanhVien frmThemTV = new frmThemThanhVien();
            frmThemTV.Show();
            frmThemTV.FormClosing += new FormClosingEventHandler(frmThemTV_FormClosing);
        }
        private void loadThongTinCapNhatThanhVien()
        {
            try
            {
                int idTv = Convert.ToInt16(gridViewThanhVien.CurrentRow.Cells[0].Value);

                frmThemThanhVien frmUpdateTV = new frmThemThanhVien();
                frmUpdateTV.Show();
                frmUpdateTV.FormClosing += new FormClosingEventHandler(frmThemTV_FormClosing);
                frmUpdateTV.btnLuu.Text = "Cập nhật";
                frmUpdateTV.lblMessage.Text = "Cập nhật thành viên";
                frmUpdateTV.lblTenTVMoi.Text = "Họ và tên thành viên";

                frmUpdateTV.btnLuu.Enabled = DTO_NguoiDung.isAdministrator;
                frmUpdateTV.btnThem.Enabled = DTO_NguoiDung.isAdministrator;
                frmUpdateTV.btnThemThanhTich.Enabled = DTO_NguoiDung.isAdministrator;
                frmUpdateTV.btnXoa.Enabled = DTO_NguoiDung.isAdministrator;
                frmUpdateTV.btnXoaThanhTich.Enabled = DTO_NguoiDung.isAdministrator;

                DTO_ThanhVien tv = busThanhVien.getThanhVienById(idTv);
                frmUpdateTV.txtTenTVMoi.Text = tv.TenTV;
                frmUpdateTV.dtPickNgaySinh.Value = tv.NgaySinh;
                frmUpdateTV.dtPickNgayPhanPhat.Value = tv.NgayPhatSinh;
                frmUpdateTV.txtDiaChi.Text = tv.DiaChi;
                
                frmUpdateTV.txtDoi.Text = tv.Doi.ToString();
                frmUpdateTV.txtMaTV.Text = idTv.ToString();
                frmUpdateTV.imgHinhAnh = tv.HinhAnh;

                if (tv.DaKetHon.HasValue)
                {
                    frmUpdateTV.cbxDaKetHon.Checked = tv.DaKetHon.Value;
                }
                if (tv.DaMat.HasValue)
                {
                    frmUpdateTV.cbxDaMat.Checked = tv.DaMat.Value;
                }

                if (tv.MaQueQuan != null)
                {
                    frmUpdateTV.cboQueQuan.SelectedValue = tv.MaQueQuan;
                }
                if (tv.MaNgheNghiep != null)
                {
                    frmUpdateTV.cboNgheNghiep.SelectedValue = tv.MaNgheNghiep;
                }

                if (tv.HinhAnh != null)
                {
                    string fileName = Environment.CurrentDirectory.Replace(@"\bin\Debug", @"\Resources") + @"\" + tv.HinhAnh;
                    if (File.Exists(fileName))
                    {
                        frmUpdateTV.imgThanhVien.Image = Image.FromFile(fileName);
                    }
                }

                if (tv.DaMat.HasValue && tv.DaMat.Value)
                {
                    if (tv.MaNguyenNhan != null)
                    {
                        frmUpdateTV.cboNguyenNhanMat.SelectedValue = tv.MaNguyenNhan;
                    }
                    if (tv.MaDDMaiTang != null)
                    {
                        frmUpdateTV.cboDDMaiTang.SelectedValue = tv.MaDDMaiTang;
                    }

                    if (tv.NgayGioMat.HasValue)
                    {
                        frmUpdateTV.dtPicNgayGioMat.Value = tv.NgayGioMat.Value;
                    }
                }
                if (tv.GioiTinh)
                {
                    frmUpdateTV.rbtNam.Checked = true;
                }
                else
                {
                    frmUpdateTV.rbtNu.Checked = true;
                }
                //cập nhật gridview 2 tab quan hệ và thành tích
                DataTable tbQuanHe = busThanhVien.getQuanHeOfThanhVien(tv.MaTV);
                foreach (DataRow row in tbQuanHe.Rows)
                {
                    frmUpdateTV.gridViewQuanHe.Rows.Add(row[0], row[1], row[2], row[3]);
                }
                DataTable tbThanhTich = busThanhVien.getThanhTichOfThanhVien(tv.MaTV);
                foreach (DataRow row in tbThanhTich.Rows)
                {
                    frmUpdateTV.gridViewThanhTich.Rows.Add(row[0], row[1], row[2]);
                }

                // cập nhật lại danh sách thành viên cũ ko có thành viên đang cập nhật
                DataTable tableTvCu = busThanhVien.getAllThanhVien();
                if (tableTvCu.Rows.Count > 1) // phải có hơn 1 vì thành viên đang cập nhật là 1
                {
                    foreach (DataRow row in tableTvCu.Rows)
                    {
                        if (idTv.ToString().Equals(row[DTO_ThanhVien.MATHANHVIEN].ToString()))
                        {
                            tableTvCu.Rows.Remove(row); break;
                        }
                    }
                    frmUpdateTV.cboThanhVienCu.DataSource = tableTvCu;
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show("Vui lòng chọn lại thành viên để cập nhật ! \r\n Lỗi : " + ex.Message, "Lỗi", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }


        private void thốngKếThànhTíchToolStripMenuItem_Click(object sender, EventArgs e)
        {
            frmThongKeThanhTich tt = new frmThongKeThanhTich();
            tt.Show();
        }

        private void mniLoaiThanhTich_Click(object sender, EventArgs e)
        {
            new frmLoaiThanhTich().Show();
        }

        private void mniQueQuan_Click(object sender, EventArgs e)
        {
            new frmQueQuan().Show();
        }

        private void mniNguyenNhanMat_Click(object sender, EventArgs e)
        {
            new frmNguyenNhanMat().Show();
        }

        private void mniLoaiQuanHe_Click(object sender, EventArgs e)
        {
            new frmLoaiQuanHe().Show();
        }

        private void mniDDMaiTang_Click(object sender, EventArgs e)
        {
            new frmDiaDiemMaiTang().Show();
        }

        SaveFileDialog saveFile = new SaveFileDialog();
        private void mniBackup_Click(object sender, EventArgs e)
        {
            try
            {
                saveFile.Title = "Sao lưu dữ liệu ";
                saveFile.InitialDirectory = @"D:\";
                saveFile.Filter = "Backup|*.bak";
                if (saveFile.ShowDialog() == DialogResult.OK)
                {
                    if (busDatabase.backupDatabase(saveFile.FileName))
                    {
                        MessageBox.Show("Sao lưu dữ liệu thành công !!!", "Thông tin", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    }
                    else
                    {
                        MessageBox.Show(@"Sao lưu dữ liệu thất bại ! Tốt nhất nên chọn ổ đĩa D:\", "Thông tin", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    }
                }

            }
            catch (Exception ex)
            {
                MessageBox.Show(@"Tốt nhất nên chọn ổ đĩa D:\ \r\nLỗi : " + ex.Message, "Thông tin", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }
        OpenFileDialog openFile = new OpenFileDialog();
        private void mniRestore_Click(object sender, EventArgs e)
        {
            try
            {
                openFile.Title = "Sao lưu dữ liệu ";
                openFile.InitialDirectory = @"D:\";
                openFile.Filter = "Backup|*.bak";
                if (openFile.ShowDialog() == DialogResult.OK)
                {
                    if (busDatabase.restoreDatabase(openFile.FileName))
                    {
                        MessageBox.Show("Phục hồi dữ liệu thành công !!!", "Thông tin", MessageBoxButtons.OK, MessageBoxIcon.Information);
                        this.loadData();
                    }
                    else
                    {
                        MessageBox.Show("Phục hồi dữ liệu thất bại !!!", "Thông tin", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    }
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show("Lỗi : " + ex.Message, "Thông tin", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void tsThongTin_Click(object sender, EventArgs e)
        {
            frmInformation frm = new frmInformation();
            frm.Show();
        }

    }
}
